/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package bomberman.pl.divano.klient;

import bomberman.pl.divano.gra.Gra;
import bomberman.pl.divano.gra.STAŁE;
import bomberman.pl.divano.gra.Zmiany;
import bomberman.pl.divano.interfejs.Okno;
import bomberman.pl.divano.server.PARAMETRY;
import bomberman.pl.divano.server.SerwerOdbiorca;
import java.io.IOException;
import java.io.InvalidClassException;
import java.io.ObjectInputStream;
import java.net.Socket;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane.CloseAction;


/**
 *
 * @author divano
 */
public class KlientOdbiorca implements Runnable, PARAMETRY {

    private static Random r = new Random();
    private Socket serwer;
    private Gra bomberman;
    private ObjectInputStream wejscieObiektów;
    private KlientNadawca nadajacy;
    /*private ObjectOutputStream wyjscieObiektów;*/

    public KlientOdbiorca(Gra arg, Socket serw, KlientNadawca nad) {

        try {
            nadajacy = nad;
            new Thread(nad).start();
            bomberman = arg;
            this.serwer = serw;
            wejscieObiektów = new ObjectInputStream(this.serwer.getInputStream());
            Zmiany tmp;
            try {
               // Thread.sleep(1000);
                TimeUnit.MILLISECONDS.sleep(200);
            } catch (InterruptedException ex) {
                Logger.getLogger(KlientOdbiorca.class.getName()).log(Level.SEVERE, null, ex);
            }
            tmp = (Zmiany)wejscieObiektów.readObject();
            //System.out.println("Odebrano klient init "+tmp.getX()+" "+tmp.getTyp()+" "+tmp.getY()+" "+tmp.getKolor());
            bomberman.setAktor(tmp);
        } catch (ClassNotFoundException ex) {
            //Logger.getLogger(KlientOdbiorca.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Blad komunikacji z serwerem 0x1a");
            System.exit(1);
        } catch (IOException ex) {
            //Logger.getLogger(KlientOdbiorca.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Blad komunikacji z serwerem 0x1b");
            System.exit(1);
        }
       
    }

    public Object odbierzObiekt() throws ClassNotFoundException, IOException {

        //Object arg = null;
        Zmiany tmp = null;
        try {
            
            //arg = wejscieObiektów.readObject();
            tmp = (Zmiany)wejscieObiektów.readObject();
            //wejscieObiektów.close();
            if(tmp.getTyp() != STAŁE.KATEGORIA_POZWOLENIE){
                System.out.print("Odebrano klient x:"+tmp.getX()+" y:"+tmp.getY()+" typ:"+tmp.getTyp()+" kolor:"+tmp.getKolor());
                if(tmp.isUsun())System.out.print(" Usuwanie");
                if(tmp.isWstaw())System.out.print(" Wstawianie");
                System.out.println();
            }
        } catch (IOException ex) {
            Logger.getLogger(SerwerOdbiorca.class.getName()).log(Level.SEVERE, null, ex);

        } finally {
        }
        return tmp;
    }

    public void run() {
        Zmiany tmp;
        boolean pracuj = true;
        try {
            while (pracuj == true) {
                tmp = (Zmiany)odbierzObiekt();
                if(tmp.getTyp().equals(STAŁE.KATEGORIA_POZWOLENIE)){
                    nadajacy.setMoznaNadawac(true);
                }else{
                    bomberman.setZmiany((Zmiany)tmp);
                }
            }
            serwer.close();
        }/* catch (Exception e) {
            System.out.println("Blad komunikacji z serwerem 0x1c");
            System.exit(1);
        }*/
        catch (ClassNotFoundException ex) {
            Logger.getLogger(KlientOdbiorca.class.getName()).log(Level.SEVERE, null, ex);
        }        catch (IOException ex) {
            Logger.getLogger(KlientOdbiorca.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
